package com.smart.community.property.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

/**
 * 维修工单进度记录实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 不继承BaseEntity：此表有自己独特的字段结构
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用Integer类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 字段映射：使用@TableField注解明确指定数据库字段名
 * - 时间格式化：使用@JsonFormat注解格式化时间字段
 * - 数据校验：使用@NotNull等注解进行数据校验
 * - 文档注释：使用@Schema注解提供API文档说明
 */
@Data
@TableName("sc_repair_progress")
@Schema(description = "维修工单进度记录实体")
public class RepairProgress {

    /**
     * 进度ID
     */
    @Schema(description = "进度ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 工单ID
     */
    @Schema(description = "工单ID")
    @NotNull(message = "工单ID不能为空")
    @TableField("order_id")
    private Long orderId;

    /**
     * 工单号
     */
    @Schema(description = "工单号")
    @NotNull(message = "工单号不能为空")
    @TableField("order_no")
    private String orderNo;

    /**
     * 进度类型（1-受理，2-分配，3-开始维修，4-完成，5-取消）
     */
    @Schema(description = "进度类型：1-受理，2-分配，3-开始维修，4-完成，5-取消")
    @NotNull(message = "进度类型不能为空")
    @TableField("progress_type")
    private Integer progressType;

    /**
     * 进度标题
     */
    @Schema(description = "进度标题")
    @TableField("progress_title")
    private String progressTitle;

    /**
     * 进度内容
     */
    @Schema(description = "进度内容")
    @TableField("progress_content")
    private String progressContent;

    /**
     * 进度发生时间
     */
    @Schema(description = "进度发生时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("progress_time")
    private LocalDateTime progressTime;

    /**
     * 操作人ID
     */
    @Schema(description = "操作人ID")
    @TableField("operator_id")
    private Long operatorId;

    /**
     * 维修人员ID
     */
    @Schema(description = "维修人员ID")
    @TableField("repairman_id")
    private Long repairmanId;

    /**
     * 维修人员姓名
     */
    @Schema(description = "维修人员姓名")
    @TableField("repairman_name")
    private String repairmanName;

    /**
     * 备注信息
     */
    @Schema(description = "备注信息")
    @TableField("remark")
    private String remark;

    /**
     * 状态（1-正常，0-已删除）
     */
    @Schema(description = "状态：1-正常，0-已删除")
    @TableField("status")
    private Integer status;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段")
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 操作人姓名
     */
    @Schema(description = "操作人姓名")
    @TableField("operator_name")
    private String operatorName;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
} 